﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ForrajeriaBCL;
using ForrajeriaDB;
using System.Data;

namespace ForrajeriaFRONT.ABM
{
    public partial class Empleado : System.Web.UI.Page
    {
        private EmpleadoMO empleado = new EmpleadoMO();
        ProvinciaBCL gestorProvincia = new ProvinciaBCL();
        private LocalidadBCL gestorLocalidades = new LocalidadBCL();
        private EmpleadoBCL gestorEmpleado = new EmpleadoBCL();
        private TipoDocumentoBCL gestorDocumentos = new TipoDocumentoBCL();

        protected void Page_Load(object sender, EventArgs e)
        {
            ((Label)this.Master.FindControl("lblTitulo")).Text = "Empleados";
            if(!IsPostBack)
            {
                cargarInicio();
                cargarComboDocumento();
                cargarComboProvincia(ddlProvincia);
                ddlLocal.Items.Add(new ListItem("---Seleccione---", "0"));
                cargarComboProvincia(ddlProv);
                //cargarBusqueda();
                cargarComboProvincia(ddlProvinciaInforme);
                ddlLocalidadInforme.Items.Add(new ListItem("---Seleccione---", "0"));
            }
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            cargarInicio();
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            vaciarControlesCarga();
            if(btnNuevo.Text=="Nuevo")
            {
                btnNuevo.Text = "Limpiar";
                EmpleadoMO emp = new EmpleadoMO();
                emp.Codigo = -1;
                ViewState["empleado"] = emp;
                modoVentana("nuevo");
            }
            if(btnNuevo.Text=="Limpiar")
            {
                modoVentana("nuevo");
            }
        }

        protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            int provSeleccionada = int.Parse(ddlProvincia.SelectedValue.ToString());
            ddlLocalidad.DataSource = gestorLocalidades.GetAll(provSeleccionada);
            ddlLocalidad.DataValueField = "Id_Localidad";
            ddlLocalidad.DataTextField = "Nombre";
            ddlLocalidad.DataBind();
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;

            string s = null;
            try
            {
                EmpleadoMO emp = (EmpleadoMO)ViewState["empleado"];
                emp = crearEmpleado(emp.Codigo);
                if (emp.Codigo == -1) s = gestorEmpleado.Adicionar(emp);
                else s = gestorEmpleado.Actualizar(emp);
            }
            catch (Exception)
            {
                mensaje.Text = "Error al cargar el Empleado!";
            }

            if(s !=null && s=="1") mensaje.Text = "Empleado cargado con exito!";
            else mensaje.Text = "Error al cargar el Empleado!";

        }

        protected void btnBorrar_Click(object sender, EventArgs e)
        {

            EmpleadoMO emp = (EmpleadoMO)ViewState["empleado"];

            try
            {
                gestorEmpleado.Eliminar(emp);
            }
            catch (Exception)
            {
                mensaje.Text = "Error al eliminar el Empleado!";
            }
            mensaje.Text = "Empleado borrado con exito!";
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            EmpleadoMO emp = new EmpleadoMO();
            try
            {
                modoVentana("edicion");
            }
            catch (Exception)
            {
                mensaje.Text = "Error al recuperar el Empleado!";
            }
            
        }

        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        public void cargarGrilla()
        {
            string nombreLike = null;
            string apellidoLike = null;
            int? localidad = null;
            int? nroDoc = null;
            if (!string.IsNullOrWhiteSpace(txtNombreLike.Text)) nombreLike = txtNombreLike.Text;
            if (!string.IsNullOrWhiteSpace(txtApellidoLike.Text)) apellidoLike = txtApellidoLike.Text;
            if (ddlLocal.SelectedValue != "0") localidad = int.Parse(ddlLocal.SelectedItem.Value);
            if (!string.IsNullOrWhiteSpace(txtNroDoc.Text)) nroDoc = int.Parse(txtNroDoc.Text);

            List<EmpleadoMO> listaEmpleados = new List<EmpleadoMO>();
            listaEmpleados = gestorEmpleado.getByFilters(nombreLike, apellidoLike, localidad, nroDoc); ;

            grdEmpleados.DataSource = listaEmpleados;
            grdEmpleados.DataBind();
            
        }

        protected void btnBuscarTodos_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;

            try
            {
                cargarGrilla();
                
            }
            catch (Exception ex)
            {
                mensaje.Text = ex.Message;
            }
        }

        protected void ddlProv_SelectedIndexChanged(object sender, EventArgs e)
        {
            int provSeleccionada = int.Parse(ddlProv.SelectedValue.ToString());
            cargarComboLocalidad(provSeleccionada,ddlLocal);
        }

        public void cargarBusqueda()
        {
            panelBusca.Visible = true;
            panelCarga.Visible = false;
            panelInicio.Visible = true;
            panelInforme.Visible = false;
        }

        public void cargarCarga()
        {
            panelBusca.Visible = false;
            panelCarga.Visible = true;
            panelInicio.Visible = true;
            panelInforme.Visible = false;
        }

        public void cargarInicio()
        {
            panelBusca.Visible = false;
            panelCarga.Visible = false;
            panelInicio.Visible = true;
            panelInforme.Visible = false;
        }
        public void cargarInforme()
        {
            
            panelBusca.Visible = false;
            panelCarga.Visible = false;
            panelInicio.Visible = true;
            panelInforme.Visible = true;
            ddlLocalidadInforme.Items.Add(new ListItem("---Seleccione---", "0"));
        }

        public void cargarComboProvincia(DropDownList provinc)
        {
            provinc.Items.Clear();
            List<ProvinciaMO> ListaProvincia = gestorProvincia.GetALL();
            provinc.Items.Add(new ListItem("---Seleccione---", "0"));
            foreach (ProvinciaMO aux in ListaProvincia)
            {
                provinc.Items.Add(new ListItem(aux.Nombre, aux.CodigoProvincia.ToString()));
            }
        }

        public void cargarComboDocumento()
        {
            ddlTipoDocumento.Items.Clear();
            List<TipoDocumentoMO> listaDocumentos = gestorDocumentos.GetAll();
            ddlTipoDocumento.Items.Add(new ListItem("---Seleccione---", "0"));

            foreach (TipoDocumentoMO aux in listaDocumentos)
            {
                ddlTipoDocumento.Items.Add(new ListItem(aux.TipoDocumento1, aux.Codigo.ToString()));
            }
        }

        public void cargarComboLocalidad(int provincia, DropDownList combo)
        {
            List<LocalidadMO> listaLocalidades = gestorLocalidades.GetAll(provincia);
            combo.Items.Clear();
            combo.Items.Add(new ListItem("---Seleccione---", "0"));
            foreach (LocalidadMO aux in listaLocalidades)
            {
                combo.Items.Add(new ListItem(aux.Nombre, aux.Id_localidad.ToString()));                
            }
        }

        public EmpleadoMO crearEmpleado(int codigo)
        {
            EmpleadoMO emp = new EmpleadoMO();
            emp.Codigo = codigo;
            emp.Nombre = txtNombre.Text;
            emp.Apellido = txtApellido.Text;
            emp.Telefono = txtTelefono.Text;
            if (ddlTipoDocumento.SelectedValue != "0") emp.TipoDocumento = int.Parse(ddlTipoDocumento.SelectedItem.Value);
            if (!string.IsNullOrWhiteSpace(txtNroDocumento.Text)) emp.NroDocumento = int.Parse(txtNroDocumento.Text);
            emp.Calle = txtCalle.Text;
            if (!string.IsNullOrWhiteSpace(txtNumeroCalle.Text)) emp.NroCalle = int.Parse(txtNumeroCalle.Text);
            emp.Piso = txtPiso.Text;
            emp.Dpto = txtDepartamento.Text;
            if (ddlLocalidad.SelectedValue != "0") emp.Localidad = int.Parse(ddlLocalidad.SelectedItem.Value);

            return emp;
        }

        public void cargarEmpleadoEnControles(EmpleadoMO empledoMo)
        {
            txtNombre.Text = empledoMo.Nombre;
            txtApellido.Text = empledoMo.Apellido;
            txtTelefono.Text = empledoMo.Telefono; ;
            ddlTipoDocumento.SelectedValue = empledoMo.TipoDocumento.ToString();
            txtNroDocumento.Text = empledoMo.NroDocumento.ToString();
            txtCalle.Text = empledoMo.Calle;
            txtNumeroCalle.Text = empledoMo.NroCalle.ToString();
            txtPiso.Text = empledoMo.Piso;
            txtDepartamento.Text = empledoMo.Dpto;

            if (empledoMo.Localidad.HasValue)
            {
                ddlProvincia.SelectedValue = (gestorLocalidades.GetProvinciaDeLocalidad(empledoMo.Localidad.Value)).ToString();
                cargarComboLocalidad(int.Parse(ddlProvincia.SelectedValue), ddlLocalidad);
                ddlLocalidad.SelectedValue = empledoMo.Localidad.ToString();
            }
                
            
        }

        public void vaciarControlesCarga()
        {

            txtNombre.Text = string.Empty;
            txtApellido.Text = string.Empty;
            txtTelefono.Text = string.Empty;
            ddlTipoDocumento.ClearSelection();
            txtNroDocumento.Text = string.Empty;
            txtCalle.Text = string.Empty;
            txtNumeroCalle.Text = string.Empty;
            txtPiso.Text = string.Empty;
            txtDepartamento.Text = string.Empty;
            ddlLocalidad.ClearSelection();
            ddlProvincia.ClearSelection();
        }

        protected void grdEmpleados_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            cargarGrilla();
        }

        protected void grdEmpleados_RowEditing(object sender, GridViewEditEventArgs e)
        {
            EmpleadoMO empleado = new EmpleadoMO();
            int seleccionado = e.NewEditIndex; //e.NewEditIndex;
            try
            {
                empleado.Codigo = Int32.Parse(grdEmpleados.DataKeys[seleccionado].Values["Codigo"].ToString());
                empleado.Nombre = grdEmpleados.Rows[seleccionado].Cells[0].Text;
                empleado.Apellido = grdEmpleados.Rows[seleccionado].Cells[1].Text;
                empleado.TipoDocumento = Int32.Parse(grdEmpleados.DataKeys[seleccionado].Values["TipoDocumento"].ToString());
                empleado.NroDocumento = int.Parse(grdEmpleados.Rows[seleccionado].Cells[2].Text);
                empleado.Localidad = int.Parse(grdEmpleados.Rows[seleccionado].Cells[3].Text);
                empleado.Calle = grdEmpleados.Rows[seleccionado].Cells[4].Text;
                empleado.NroCalle = int.Parse(grdEmpleados.Rows[seleccionado].Cells[5].Text);
                empleado.Piso = grdEmpleados.DataKeys[seleccionado].Values["Piso"].ToString();
                empleado.Dpto = grdEmpleados.DataKeys[seleccionado].Values["Dpto"].ToString();
                ViewState["empleado"] = empleado;
                cargarCarga();
                
                cargarEmpleadoEnControles((EmpleadoMO) ViewState["empleado"]);
                e.NewEditIndex = -1;
            }
            catch (Exception)
            {

                throw;
            }
        }
        protected void modoVentana(string modo)
        {
            switch (modo)
            {
                case "nuevo":
                    btnNuevo.Visible = true;
                    btnNuevo.Text = "Limpiar";
                    btnBorrar.Visible = true;
                    btnEditar.Visible = false;
                    btnGuardar.Visible = true;
                    btnCancelar.Visible = true;
                    activarControlesCarga();
                    break;
                case "ver":
                    btnNuevo.Visible = true;
                    btnNuevo.Text = "Nuevo";
                    btnBorrar.Visible = true;
                    btnEditar.Visible = true;
                    btnGuardar.Visible = false;
                    btnCancelar.Visible = false;
                    desactivarControlesCarga();
                    break;
                case "edicion":
                    btnNuevo.Visible = false;
                    btnNuevo.Text = "Nuevo";
                    btnBorrar.Visible = false;
                    btnEditar.Visible = false;
                    btnGuardar.Visible = true;
                    btnCancelar.Visible = true;
                    activarControlesCarga();
                    break;
                case "eliminar":
                    btnNuevo.Visible = false;
                    btnNuevo.Text = "Nuevo";
                    btnBorrar.Visible = true;
                    btnEditar.Visible = false;
                    btnGuardar.Visible = false;
                    btnCancelar.Visible = true;
                    
                    break;

                case "bloqueado":
                    desactivarControlesCarga();
                    break;
            }
        }

        protected void grdEmpleados_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            int seleccionado = e.NewSelectedIndex;
            obtenerEmpleadoDeGrilla(seleccionado);
            modoVentana("ver");
        }

        protected void grdEmpleados_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void grdEmpleados_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            EmpleadoMO empleado =null;
            if(grdEmpleados.DataKeys[e.RowIndex].Values["Codigo"]!=null)
            {
                empleado = new EmpleadoMO();
                empleado.Codigo = Int32.Parse(grdEmpleados.DataKeys[e.RowIndex].Values["Codigo"].ToString());
            } 
            
            string s = gestorEmpleado.Eliminar(empleado);

            if(empleado!=null)
            {
                if (s == "1")
                {
                    mensaje.Text = "Empleado eliminado con exito";
                }
                else
                {
                    mensaje.Text = "Error al eliminar el Empleado";
                }
            }
            else
            {
                mensaje.Text = "Error al eliminar el Empleado";
            }

            cargarGrilla();
            

        }

        protected void grdEmpleados_RowEditing1(object sender, GridViewEditEventArgs e)
        {
            int seleccionado = e.NewEditIndex;
            obtenerEmpleadoDeGrilla(seleccionado);
            ViewState["empleado"] = empleado;

             modoVentana("edicion");
        }

        public void obtenerEmpleadoDeGrilla(int seleccionado)
        {
            try
            {

                vaciarControlesCarga();
                //codigo
                if (!string.IsNullOrWhiteSpace(grdEmpleados.DataKeys[seleccionado].Values["Codigo"].ToString()))
                {
                    empleado.Codigo = int.Parse(grdEmpleados.DataKeys[seleccionado].Values["Codigo"].ToString());
                }
                //nombre
                if (!string.IsNullOrWhiteSpace(grdEmpleados.Rows[seleccionado].Cells[0].Text))
                {
                    empleado.Nombre = grdEmpleados.Rows[seleccionado].Cells[0].Text;
                }
                //apellido
                if (!string.IsNullOrWhiteSpace(grdEmpleados.Rows[seleccionado].Cells[1].Text))
                {
                    empleado.Apellido = grdEmpleados.Rows[seleccionado].Cells[1].Text;
                }
                //Telefono
                if (!string.IsNullOrWhiteSpace(grdEmpleados.Rows[seleccionado].Cells[2].Text))
                {
                    empleado.Telefono = grdEmpleados.Rows[seleccionado].Cells[2].Text;
                }
                //TipoDocumento
                if (!string.IsNullOrWhiteSpace(grdEmpleados.DataKeys[seleccionado].Values["TipoDocumento"].ToString()))
                {
                    empleado.TipoDocumento = int.Parse(grdEmpleados.DataKeys[seleccionado].Values["TipoDocumento"].ToString());
                }
                //NroDocumento
                if (!string.IsNullOrWhiteSpace(grdEmpleados.DataKeys[seleccionado].Values["NroDocumento"].ToString()))
                {
                    empleado.NroDocumento = int.Parse(grdEmpleados.DataKeys[seleccionado].Values["NroDocumento"].ToString());
                }

                //IdLocalidad
                if (!string.IsNullOrWhiteSpace(grdEmpleados.DataKeys[seleccionado].Values["Localidad"].ToString()))
                {
                    empleado.Localidad = int.Parse(grdEmpleados.DataKeys[seleccionado].Values["Localidad"].ToString());
                    cargarComboProvincia(ddlProvincia);
                    int prov = gestorLocalidades.GetProvinciaDeLocalidad(empleado.Localidad.Value);
                    ddlProvincia.SelectedValue = prov.ToString();
                    cargarComboLocalidad(prov, ddlLocalidad);
                    ddlLocalidad.SelectedValue = empleado.Localidad.ToString();
                }
                //Calle
                if (!string.IsNullOrWhiteSpace(grdEmpleados.Rows[seleccionado].Cells[4].Text))
                {
                    empleado.Calle = grdEmpleados.Rows[seleccionado].Cells[4].Text;
                }
                //NroCalle
                if (!string.IsNullOrWhiteSpace(grdEmpleados.Rows[seleccionado].Cells[5].Text))
                {
                    empleado.NroCalle = int.Parse(grdEmpleados.Rows[seleccionado].Cells[5].Text);
                }
                //Piso
                if (grdEmpleados.DataKeys[seleccionado].Values["Piso"] != null)
                {
                    empleado.Piso = grdEmpleados.DataKeys[seleccionado].Values["Piso"].ToString();
                }
                //Dpto
                if (grdEmpleados.DataKeys[seleccionado].Values["Dpto"] != null)
                {
                    empleado.Dpto = grdEmpleados.DataKeys[seleccionado].Values["Dpto"].ToString();
                }
                cargarCarga();
                cargarEmpleadoEnControles(empleado);
                ViewState["empleado"] = empleado;
            }
            catch (Exception ex)
            {

                mensaje.Text = ex.Message;
            }
        }

        public void activarControlesCarga()
        {
            txtNombre.Enabled = true;
            txtApellido.Enabled = true;
            ddlTipoDocumento.Enabled = true;
            txtNroDocumento.Enabled = true;
            txtTelefono.Enabled = true;
            ddlProvincia.Enabled = true;
            ddlLocalidad.Enabled = true;
            txtCalle.Enabled = true;
            txtNumeroCalle.Enabled = true;
            txtPiso.Enabled = true;
            txtDepartamento.Enabled = true;
        }

        public void desactivarControlesCarga()
        {
            txtNombre.Enabled = false;
            txtApellido.Enabled = false;
            ddlTipoDocumento.Enabled = false;
            txtNroDocumento.Enabled = false;
            txtTelefono.Enabled = false;
            ddlProvincia.Enabled = false;
            ddlLocalidad.Enabled = false;
            txtCalle.Enabled = false;
            txtNumeroCalle.Enabled = false;
            txtPiso.Enabled = false;
            txtDepartamento.Enabled = false;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            modoVentana("ver");
        }

        protected void btnNuevo2_Click(object sender, EventArgs e)
        {
            cargarCarga();
            cargarComboProvincia(ddlProvincia);
            cargarComboDocumento();
            modoVentana("nuevo");
        }

        protected void btnBuscar3_Click(object sender, EventArgs e)
        {
            cargarBusqueda();
            cargarComboProvincia(ddlProvincia);

            List<EmpleadoMO> listaEmpleados = new List<EmpleadoMO>();
            listaEmpleados = gestorEmpleado.GetAll();
            //listaEmpleados = gestorEmpleado.getByFilters(nombreLike, apellidoLike, localidad, nroDoc); ;
            grdEmpleados.DataSource = listaEmpleados;
            grdEmpleados.DataBind();
        }

        protected void btnInforme_Click(object sender, EventArgs e)
        {
            try
            {
                cargarInforme();
                cargarComboProvincia(ddlProvinciaInforme);
            }
            catch (Exception)
            {
                
            }
            
        }

        public void cargarInformeVentas()
        {
            float? montovendido = null;
            int? provincia = null;
            int? localidad = null;

            if (!string.IsNullOrEmpty(txtMontoVendido.Text)) montovendido = float.Parse(txtMontoVendido.Text);

            if (ddlLocalidadInforme.SelectedValue != "0") localidad = int.Parse(ddlLocalidadInforme.SelectedValue);

            if (ddlProvinciaInforme.SelectedValue != "0") provincia = int.Parse(ddlProvinciaInforme.SelectedValue);


            List<EmpleadoInforme> lista = new List<EmpleadoInforme>();
            lista = gestorEmpleado.getInformeVentas(montovendido, provincia, localidad);
            grdInforme.DataSource = lista;
            grdInforme.DataBind();
        }

        protected void btnGenerarInforme_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;
            try
            {
                cargarInformeVentas();
            }
            catch (Exception ex)
            {
                
            }
        }

        protected void ddlProvinciaInforme_SelectedIndexChanged(object sender, EventArgs e)
        {
            cargarComboLocalidad(int.Parse(ddlProvinciaInforme.SelectedValue), ddlLocalidadInforme);
        }
            
    }
}